package com.ljt.business.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ljt.business.entity.ProductCategory;
import com.ljt.business.mapper.ProductCategoryMapper;
import com.ljt.business.service.ProductCategoryService;
import com.ljt.utils.ProductCategoryMenuTree;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author ljt
 * @since 2021-07-05
 */
@Service
public class ProductCategoryServiceImpl extends ServiceImpl<ProductCategoryMapper, ProductCategory> implements ProductCategoryService {

    @Override
    public List<ProductCategoryMenuTree> getProductCategoryMenuTree() {
        // 获取一级物资类别
        List<ProductCategory> f1 = this.baseMapper.getFirstLevelProductCategory();
        // 获取二级物资类别
        List<ProductCategory> f2 = this.baseMapper.getSecondLevelProductCategory();
        // 获取三级物资类别
        List<ProductCategory> f3 = this.baseMapper.getThreeLevelProductCategory();
        // 用于接收封装好的数据
        List<ProductCategoryMenuTree> list = new ArrayList<>();
        // 循环一级物资类别
        for (ProductCategory p1 : f1) {
            // 声明一级ProductCategoryMenuTree对象
            ProductCategoryMenuTree menuTree1 = new ProductCategoryMenuTree();
            // 给一级ProductCategoryMenuTree对象赋予初始值
            menuTree1.setId(p1.getId());
            menuTree1.setName(p1.getName());
            menuTree1.setPid(p1.getPid());
            // 将一级物资类别封装完成
            menuTree1.setSort(p1.getSort());
            // 循环二级物资类别
            for (ProductCategory p2 : f2) {
                // 声明二级ProductCategoryMenuTree对象
                ProductCategoryMenuTree m2 = new ProductCategoryMenuTree();
                // 判断二级类别的父级编号是否和一级类别的编号相同
                if (p2.getPid() == p1.getId()) {
                    // 给二级ProductCategoryMenuTree对象赋予初始值
                    m2.setId(p2.getId());
                    m2.setName(p2.getName());
                    m2.setPid(p2.getPid());
                    m2.setSort(p2.getSort());
                    // 将二级物资类别封装完成
                    menuTree1.getChildren().add(m2);
                }
                // 循环三级物资类别
                for (ProductCategory p3 : f3) {
                    // 判断三级类别的父级编号是否和二级类别的编号相同
                    if(p3.getPid() == p2.getId()){
                        // 声明三级ProductCategoryMenuTree对象
                        ProductCategoryMenuTree m3 = new ProductCategoryMenuTree();
                        // 给三级ProductCategoryMenuTree对象赋予初始值
                        m3.setId(p3.getId());
                        m3.setName(p3.getName());
                        m3.setPid(p3.getPid());
                        m3.setSort(p3.getSort());
                        // 将三级物资类别封装完成
                        m2.getChildren().add(m3);
                    }
                }
            }
            // 将数据封装
            list.add(menuTree1);
        }
        return list;
    }
}
